package dataStruct;

/**
 * @Author wangtengyu
 * @Create 2018-03-22-9:19
 * 自定义数组数据结构
 */
public class MyArray {
    //定义一个数组
    private int intArray[];

    //定义数组最大长度
    private int length;

    //定义数组当前长度/有效长度
    private int elem;


    //初始化一个长度为50的数组
    public MyArray() {
        this.length = 50;
        this.elem = 0;
        intArray = new int[length];
    }

    //初始化一个给定长度的数组
    public MyArray(int length) {
        this.length = length;
        this.elem = 0;
        intArray = new int[length];
    }

   /* 一个数据结构满足的条件
    1.如何插入一个指定数据项
    2.如何查询一个指定数据项
    3.如何删除一个指定数据项
    4.如何遍历数据项*/


    //获取当前数组实际长度
    public int getElem() {
        return this.elem;
    }

    //展示数组元素
    public void display() {
        for (int i = 0; i < elem; i++) {
            System.out.print(intArray[i] + " ");
        }
        System.out.println();
    }


    //添加元素  假设不会添加重复的元素
    public boolean add(int value) {
        if (elem == length) {
            System.out.println("越界");
            return false;
        } else {
            intArray[elem] = value;
            elem++;
        }
        return true;
    }

    //通过下标查找元素
    public int get(int index) {
        if (index < 0 || index > elem) {
            System.out.println("访问下标越界");
        }
        return intArray[index];
    }


    //通过元素查找元素下标
    public int find(int searchValue) {
        int i;
        for (i = 0; i < elem; i++) {
            if (intArray[i] == searchValue) {
                break;
            }
        }
        if (i == elem) {
            return -1;
        }
        return i;
    }

    //删除元素
    public boolean delete(int value) {
        int index = find(value);
        if (index == -1) {
            return false;
        } else {
            //如果被删除元素是最后一位
            if (index == elem - 1){
                elem--;
            }else{
                for(int i=index;i<elem-1;i++){
                    intArray[i]=intArray[i+1];
                    elem--;
                }
            }
            return true;
        }
    }


    //修改数据
    public boolean modify(int oldValue,int newValue){
        int i=find(oldValue);
        if(i==-1){
            System.out.println("需要修改的数据不存在");
            return false;
        }else{
            intArray[i]=newValue;
            return true;
        }
    }


    public static void main(String[] args) {
        //创建自定义封装数组结构，数组大小为4
        MyArray array = new MyArray(4);
        //添加4个元素分别是1,2,3,4
        array.add(1);
        array.add(2);
        array.add(3);
        array.add(4);
        //显示数组元素
        array.display();
        //根据下标为0的元素
        int i = array.get(0);
        System.out.println(i);
        //删除4的元素
        array.delete(4);
        //将元素3修改为33
        array.modify(3, 33);
        array.display();
        //System.out.println(array.find(44));
        //System.out.println(array.modify(44,44));
        array.display();
    }


}
